iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
Web 3

以 Python 進入以太坊虛擬機 (EVM) 的幻想境界系列 第 22

虛擬境界22:介紹 State Proof

  • 分享至 

  • xImage
  •  

在zkevm 證明環境中,狀態證明協助核實所有隨機讀寫訪問記錄的有效性。讓我們深入了解其工作原理及其重要的細節。

State Proof 概述

  • 目的:驗證所有的隨機讀寫存取記錄是否有效。
  • 方法:通過首先根據它們的唯一索引對它們進行分組,然後根據訪問順序對它們進行排序。
  • ReadWriteCounter:記錄訪問次數的計數器,同時也作為記錄的唯一標識符。

隨機讀寫數據

狀態證明主要保持 EVM 證明的隨機訪問數據的讀寫部分。涵蓋了以下操作:

  1. Start: 交易的開始和填充行
  2. Memory: 呼叫的內存,表現為字節數組
  3. Stack: 以RLC編碼的詞組成的呼叫堆棧
  4. Storage: 帳戶的存儲,表現為鍵值映射
  5. CallContext: 一個呼叫的上下文
  6. Account: 帳戶的狀態(nonce,餘額,代碼哈希)
  7. TxRefund: 退還給交易發送者的值
  8. TxAccessListAccount: 帳戶訪問列表的狀態
  9. TxAccessListAccountStorage: 帳戶存儲訪問列表的狀態
  10. TxLog: 交易日誌的狀態
  11. TxReceipt: 交易收據的狀態

每個操作使用不同的參數進行索引。在數據中,所有表鍵的連接變成數據的唯一索引。每條記錄都將附加一個 ReadWriteCounter,並且記錄首先按其唯一索引分組,然後按其ReadWriteCounter增加排序。

電路約束

電路的約束分為兩組:

  • 影響所有操作的全局約束,例如鍵的字典序。
  • 應用於每種操作的特殊約束。

關於 MemoryStackStorage 等不同區段有各自的特定約束條件。具體的條件可以參考上文的描述(例如Memory有:value 是字節、initial_value 是0、state root保持一致等)。

關於帳戶和存儲訪問

所有帳戶和存儲的讀寫訪問都與 Merkle Patricia Trie (MPT) Circuit 鏈接。這是因為不同於每個區塊中初始化為0的其餘條目,帳戶和存儲通過以太坊狀態和存儲Tries在區塊之間持久存在。一般來說,我們將每個鍵的第一次和最後一次訪問鏈接到使用鏈接根的MPT證明。

請注意,使用MPT證明連接帳戶和存儲訪問需要分別處理存在/不存在的情況。

總結

狀態證明在智能合約和區塊鏈技術中扮演著核心角色,它不僅僅是對資料的讀寫進行證明,更是維護著整個系統的穩定和正確運作。


上一篇
虛擬境界21:Word Encoding
下一篇
虛擬境界23:Memory Circuits
系列文
以 Python 進入以太坊虛擬機 (EVM) 的幻想境界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言